package com.niiwoo.civet.account.service.local.openAccount2.lanmao;

import com.niiwoo.civet.account.constant.AccountRegisterErrorCode;
import com.niiwoo.tripod.lanmao.enums.UserAuthorizationEnum;
import com.niiwoo.tripod.lanmao.enums.UserRoleEnum;
import com.niiwoo.tripod.provider.exception.BizException;
import java.math.BigDecimal;
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Optional;
import java.util.Set;
import org.joda.time.LocalDate;

public class LanMaoHelper {

    /**
     * 角色权限
     */
    private static Map<UserRoleEnum, Set<String>> AUTH_LIST_MAP = new HashMap<>();

    static {
        Set<String> s2 = new HashSet<>();
        s2.add(UserAuthorizationEnum.REPAYMENT.name());
        s2.add(UserAuthorizationEnum.RECHARGE.name());
        s2.add(UserAuthorizationEnum.WITHDRAW.name());
        AUTH_LIST_MAP.put(UserRoleEnum.INVESTOR, Collections.singleton(UserAuthorizationEnum.TENDER.name()));
        AUTH_LIST_MAP.put(UserRoleEnum.BORROWERS, Collections.unmodifiableSet(s2));
        AUTH_LIST_MAP.put(UserRoleEnum.GUARANTEECORP, Collections.singleton(UserAuthorizationEnum.COMPENSATORY.name()));
        AUTH_LIST_MAP.put(UserRoleEnum.COLLABORATOR, Collections.singleton(UserAuthorizationEnum.COMPENSATORY.name()));
    }

    /**
     * 根据角色获取账户权限
     *
     * @param accountRole 角色
     */
    public static String getAuthTextByRole(UserRoleEnum accountRole) {
        return String.join(",", getAuthSetByRole(accountRole));
    }

    /**
     * 根据角色获取账户权限
     *
     * @param accountRole 角色
     */
    public static Set<String> getAuthSetByRole(UserRoleEnum accountRole) {
        return Optional.ofNullable(AUTH_LIST_MAP.get(accountRole)).map(set -> (Set<String>) new HashSet<>(set)).orElseThrow(() -> new BizException(AccountRegisterErrorCode.NOT_SUPPORT_ROLE));
    }

    /**
     * 个人绑卡注册/会员激活/集团账户关联/用户授权接口中涉及授权期限和授权金额参数如下:
     * 借款人: 授权期限99年，授权金额100万元；
     * 投资人: 授权期限99年，授权金额100万元。
     */
    public static Date getFixFailTime() {
        return new LocalDate().plusYears(99).toDate();
    }

    public static BigDecimal getFixLimitAmount() {
        return new BigDecimal("1000000.00");
    }

}
